home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / extras / programm / gemfsc20 / gemfsc20.lzh / GEMFUNCS / FRMDSMEN.C < prev    next >
C/C++ Source or Header  |  1993-03-20  |  5KB  |  104 lines

  1. /*************************************************************************
  2.  * FRMDSMEN.C - The frm_dsmenu() routine.
  3.  *************************************************************************/
  4.  
  5. #include "gemfintl.h"
  6. #include <string.h>
  7.  
  8. static TEDINFO GFAR title_tedinfo = {
  9.   NULL, NULL, NULL, 3, 6, 2, 0x11F0, 0, -1,   1,   1
  10. };
  11.  
  12. static OBJECT GFAR menutree[] = {
  13.  { -1,    1,    2, G_BOX,       NONE,       NORMAL,     (_Ob_spec_t)(0x00FF1100L),       0x0000, 0x0000, 0x0001, 0x0016},
  14.  {    2, -1, -1, G_BOXTEXT,  NONE,       NORMAL,     (_Ob_spec_t)(&title_tedinfo),      0x0000, 0x0000, 0x0001, 0x0101},
  15.  {    0,    3, 22, G_IBOX,       NONE,       NORMAL,     (_Ob_spec_t)(0x00001100L),       0x0001, 0x0002, 0x0001, 0x0014},
  16.  {    4, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0000, 0x0001, 0x0001},
  17.  {    5, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0001, 0x0001, 0x0001},
  18.  {    6, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0002, 0x0001, 0x0001},
  19.  {    7, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0003, 0x0001, 0x0001},
  20.  {    8, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0004, 0x0001, 0x0001},
  21.  {    9, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0005, 0x0001, 0x0001},
  22.  { 10, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0006, 0x0001, 0x0001},
  23.  { 11, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0007, 0x0001, 0x0001},
  24.  { 12, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0008, 0x0001, 0x0001},
  25.  { 13, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0009, 0x0001, 0x0001},
  26.  { 14, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x000A, 0x0001, 0x0001},
  27.  { 15, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x000B, 0x0001, 0x0001},
  28.  { 16, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x000C, 0x0001, 0x0001},
  29.  { 17, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x000D, 0x0001, 0x0001},
  30.  { 18, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x000E, 0x0001, 0x0001},
  31.  { 19, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x000F, 0x0001, 0x0001},
  32.  { 20, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0010, 0x0001, 0x0001},
  33.  { 21, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0011, 0x0001, 0x0001},
  34.  { 22, -1, -1, G_BOXTEXT,  SELECTABLE, NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0012, 0x0001, 0x0001},
  35.  {    2, -1, -1, G_BOXTEXT,  0x0021,       NORMAL,     (_Ob_spec_t)(0L),                  0x0000, 0x0013, 0x0001, 0x0001}
  36. };
  37.  
  38. #define TITLE_BOX            1
  39. #define TEXT_BOX            2
  40. #define FIRST_TEXT_LINE     3
  41. #define LAST_TEXT_LINE       22
  42.  
  43. short frm_dsmenu(options, title, strings)
  44.     long options;
  45.     char *title;
  46.     char **strings;
  47. {
  48.     short              maxwidth;
  49.     short              numlines;
  50.     short              selection;
  51.     short              hhalf    = gl_hchar / 2;
  52.     register OBJECT *ptree     = menutree;
  53.     static short      initdone = FALSE;
  54.  
  55.     if (!(options & FRM_NODEFAULTS)) {
  56.         options |= (_FrmDefaults & FRM_DOPTIONBITS) | FRM_DEFAULT_DYNOPT;
  57.     }
  58.     options |= FRM_MANDATORY_DYNOPT;
  59.  
  60.     if (!initdone) {
  61.         initdone = TRUE;
  62.         rsc_treefix(ptree);
  63.     }
  64.  
  65.     if (title != NULL) {
  66.         ptree->ob_flags           = NORMAL;
  67.         ptree[TITLE_BOX].ob_flags = FRM_MOVER|TOUCHEXIT;
  68.         ptree[TEXT_BOX].ob_y      = ptree[TITLE_BOX].ob_height + hhalf;
  69.         title_tedinfo.te_ptext      = title;
  70.         maxwidth                  = (short)strlen(title);
  71.     } else {
  72.         ptree->ob_flags           = FRM_MOVER|TOUCHEXIT;
  73.         ptree[TITLE_BOX].ob_flags = HIDETREE;
  74.         ptree[TEXT_BOX].ob_y      = hhalf;
  75.         maxwidth                  = 1;
  76.     }
  77.  
  78.     ptree->ob_state = (options & FRM_DSHADOWED) ? SHADOWED : NORMAL;
  79.  
  80.     numlines = _FrmDS2Obj(strings, &ptree[FIRST_TEXT_LINE], NULL,
  81.                             &maxwidth, FRM_DSMAXSTRINGS);
  82.  
  83.     _FrmTrWidths(ptree, ROOT,      (maxwidth+2)*gl_wchar);
  84.     _FrmTrWidths(ptree, TEXT_BOX, maxwidth*gl_wchar);
  85.  
  86.     ptree[TEXT_BOX].ob_height = numlines * gl_hchar;
  87.     ptree->ob_height = ptree[TEXT_BOX].ob_height + ptree[TEXT_BOX].ob_y + hhalf;
  88.  
  89.     selection = frm_menu(options, ptree, SELECTED);
  90.  
  91.     if (selection > NO_OBJECT) {
  92.         ptree[selection].ob_state &= ~SELECTED;
  93.         selection -= FIRST_TEXT_LINE-1; /* adjust to 1-based index.               */
  94.         if (selection == numlines) {    /* last selection is returned as             */
  95.             selection = 0;                /* zero; it s/b Cancel, Exit, etc.                     */
  96.         }
  97.     }
  98.  
  99.     return selection;
  100. }
  101.  
  102.  
  103.  
  104.